<template>
  <table class="my-table">
    <thead>
      <tr>
        <!-- 如果我希望这一段html结构不写死，那么该怎么办？ -->
        <slot name="header">
          <th>编号</th>
          <th>图片</th>
          <th>名称</th>
          <th width="100px">标签</th>
        </slot>
      </tr>
    </thead>
    <tbody>
      <tr v-for="(item, index) in data" :key="item.id">
        <slot name="body" :item="item" :index="index">
          <td>{{ index + 1 }}</td>
          <td><img :src="item.picture" /></td>
          <td>{{ item.name }}</td>
          <td>
            <!-- 实现了父传子 -->
            <!-- $event在原生标签上代表事件对象 -->
            <!-- $event在组件上代表子组件传递过来的数据 -->
            <!-- <my-tag :value="item.tag" @input="item.tag = $event"/> -->

            <!-- 可以直接缩短为v-model -->
            <!-- v-model是一个语法糖 -->
            <!-- 
              例如你写一个 v-model="数据", 他会自动生成 :value="数据" 以及 @input="数据=$event"
              加入我写的是 v-model="item.tag"
                他就生成 :value="item.tag"
                以及 @input="item.tag = $event"
             -->
            <my-tag v-model="item.tag" />
          </td>
        </slot>
      </tr>
    </tbody>
  </table>
</template>

<script>
// 导入my-tag
import MyTag from "./MyTag";
export default {
  components: {
    MyTag,
  },
  props: {
    data: {
      type: Array,
      required: true,
    },
  },
};
</script>

<style lang="less" scoped>
.my-table {
  width: 100%;
  border-spacing: 0;
  img {
    width: 100px;
    height: 100px;
    object-fit: contain;
    vertical-align: middle;
  }
  th {
    background: #f5f5f5;
    border-bottom: 2px solid #069;
  }
  td {
    border-bottom: 1px dashed #ccc;
  }
  td,
  th {
    text-align: center;
    padding: 10px;
    transition: all 0.5s;
    &.red {
      color: red;
    }
  }
  .none {
    height: 100px;
    line-height: 100px;
    color: #999;
  }
}
</style>